import config from '../../config';
import request from '../../utils/request';
Page({
    data: {
        isModalVisible: false,
        modalTitle: '',
        modalContent: '',
        statusBarHeight: wx.getSystemInfoSync().statusBarHeight,
        // 导航栏高度，通常是 胶囊按钮高度 + 状态栏到胶囊按钮的间距 * 2
        navBarHeight: wx.getSystemInfoSync().platform === 'ios' ? 44 : 48,
        taskInfo: {
            id: null,
            requirements: '火爆来袭2024洛舍镇[市民广场老北京国潮大庙会11月29日盛大开幕! 更多详情请访问：https://www.example.com/temple-fair 或者关注我们的官网 https://www.templemall.com 了解最新活动信息。',
            content: '火爆来袭2024洛舍镇[市民广场老北京国潮大庙会11月29日盛大开幕! 更多详情请访问：https://www.example.com/temple-fair 或者关注我们的官网 https://www.templemall.com 了解最新活动信息。<br/><br/>活动二维码：<img src="https://via.placeholder.com/200x200/42c7b1/ffffff?text=QR+Code" style="width:200px;height:200px;display:block;margin:10px 0;" /><br/>扫描上方二维码获取更多信息。',
            exampleImages: [{
                    id: 1,
                    url: '/assets/images/example_placeholder_1.png',
                    color: '#e0e0e0'
                },
                {
                    id: 2,
                    url: '/assets/images/example_placeholder_2.png',
                    color: '#d0d0d0'
                }
            ]
        },
        // 添加处理后的富文本内容
        processedContent: null,
        // 存储链接信息
        linkMap: {},
        // 链接数量（供模板使用）
        linkCount: 0,
        // 存储富文本中的图片src列表
        imageSrcList: [],
        // 图片数量
        imageCount: 0
    },

    onLoad: function (options) {
        // options.id 是从首页任务列表传递过来的任务ID
        console.log('Task ID:', options.id);
        this.setData({
            'taskInfo.id': options.id
        });

        // 先处理测试数据中的链接
        this.processRichTextContent(this.data.taskInfo.content);

        request({
            url: 'api/home/getNewTaskByTaskId?taskId=' + options.id,
            method: 'get',
        }).then(res => {
            if (res.code == 200) {
                this.setData({
                    'taskInfo': res.data
                });
                // 处理富文本内容中的链接
                this.processRichTextContent(res.data.content);
            }
        }).catch(err => {
            console.log('请求失败，使用测试数据');
            // 如果请求失败，继续使用测试数据
        })
    },

    // 处理富文本内容，保持样式同时添加链接处理
    processRichTextContent: function (content) {
        if (!content) return;

        const linkMap = {};
        const imageSrcList = [];
        let processedContent = null;

        // 提取原始文本中的所有链接
        this.extractLinksFromContent(content, linkMap);
        // 提取富文本中的所有图片
        this.extractImagesFromContent(content, imageSrcList);

        // 如果content是字符串
        if (typeof content === 'string') {
            const result = this.processStringContent(content, linkMap);
            processedContent = result.content;
        }
        // 如果content是数组（nodes）
        else if (Array.isArray(content)) {
            processedContent = this.processNodesContent(content, linkMap);
        }

        this.setData({
            processedContent: processedContent || content,
            linkMap: linkMap,
            linkCount: Object.keys(linkMap).length,
            imageSrcList: imageSrcList,
            imageCount: imageSrcList.length
        });
    },

    // 从内容中提取所有链接（纯文本链接，不包括HTML属性中的）
    extractLinksFromContent: function (content, linkMap) {
        let textContent = '';

        // 获取纯文本内容
        if (typeof content === 'string') {
            // 移除HTML标签，只保留文本内容来查找链接
            textContent = content.replace(/<[^>]+>/g, ' ');
        } else if (Array.isArray(content)) {
            textContent = this.extractTextFromNodes(content);
        }

        // 在纯文本中查找链接
        const linkRegex = /(https?:\/\/[^\s<>"']+)/gi;
        let match;
        let linkIndex = 0;

        while ((match = linkRegex.exec(textContent)) !== null) {
            const link = match[1];
            if (!linkMap[link]) { // 避免重复
                linkMap[link] = linkIndex++;
            }
        }
    },

    // 从内容中提取所有图片src
    extractImagesFromContent: function (content, imageSrcList) {
        if (typeof content === 'string') {
            // 从HTML字符串中提取img标签的src
            const imgRegex = /<img[^>]+src\s*=\s*["']([^"']+)["'][^>]*>/gi;
            let match;
            while ((match = imgRegex.exec(content)) !== null) {
                const src = match[1];
                if (!imageSrcList.includes(src)) {
                    imageSrcList.push(src);
                }
            }
        } else if (Array.isArray(content)) {
            // 从nodes数组中提取图片节点的src
            this.extractImagesFromNodes(content, imageSrcList);
        }
    },

    // 从nodes数组中递归提取图片src
    extractImagesFromNodes: function (nodes, imageSrcList) {
        for (let node of nodes) {
            if (typeof node === 'object' && node.name === 'img' && node.attrs && node.attrs.src) {
                const src = node.attrs.src;
                if (!imageSrcList.includes(src)) {
                    imageSrcList.push(src);
                }
            } else if (node.children) {
                this.extractImagesFromNodes(node.children, imageSrcList);
            }
        }
    },

    // 从nodes数组中提取纯文本
    extractTextFromNodes: function (nodes) {
        let text = '';
        for (let node of nodes) {
            if (typeof node === 'string') {
                text += node + ' ';
            } else if (node.type === 'text') {
                text += node.text + ' ';
            } else if (node.children) {
                text += this.extractTextFromNodes(node.children);
            }
        }
        return text;
    },

    // 处理字符串内容，将链接包装为可点击元素
    processStringContent: function (text, linkMap) {
        // 获取所有已识别的链接
        const links = Object.keys(linkMap);
        let processedText = text;

        // 为每个链接添加样式，使用简单的u标签
        links.forEach((link, index) => {
            // 转义特殊字符
            const escapedLink = link.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
            // 简单的全局替换，只要不在标签属性中就替换
            const regex = new RegExp('\\b' + escapedLink + '\\b', 'g');

            // 先检查这个链接是否在HTML标签的属性中
            const beforeReplace = processedText;
            let tempText = processedText.replace(regex, '###LINK_PLACEHOLDER###');

            // 检查占位符是否在HTML标签内
            const htmlTagRegex = /<[^>]*###LINK_PLACEHOLDER###[^>]*>/g;
            if (htmlTagRegex.test(tempText)) {
                // 如果在HTML标签内，不进行替换
                return;
            }

            // 使用简单的u标签，添加唯一标识
            processedText = processedText.replace(regex, `<u style="color:#42c7b1;text-decoration:underline;background-color:rgba(66,199,177,0.1);padding:2rpx 4rpx;border-radius:4rpx;font-weight:500;">${link}</u>`);
        });

        return {
            content: processedText,
            hasLinks: links.length > 0
        };
    },

    // 处理nodes数组内容
    processNodesContent: function (nodes, linkMap) {
        return nodes.map(node => this.processNode(node, linkMap));
    },

    // 递归处理单个node
    processNode: function (node, linkMap) {
        if (typeof node === 'string') {
            const result = this.processStringContent(node, linkMap);
            return result.content;
        }

        if (node.type === 'text') {
            const result = this.processStringContent(node.text, linkMap);
            return {
                type: 'text',
                text: result.content
            };
        }

        if (node.children) {
            return {
                ...node,
                children: this.processNodesContent(node.children, linkMap)
            };
        }

        return node;
    },

    // 处理富文本点击事件 - 触发图片预览
    onRichTextTap: function (e) {
        console.log('Rich text tap event:', e.detail);

        // 如果有图片，触发图片预览
        if (this.data.imageSrcList.length > 0) {
            this.previewImages();
        }
    },

    // 预览所有图片
    previewImages: function () {
        const imageSrcList = this.data.imageSrcList;

        if (imageSrcList.length === 0) {
            wx.showToast({
                title: '当前内容中没有图片',
                icon: 'none',
                duration: 1500
            });
            return;
        }

        // 使用微信预览图片功能
        wx.previewImage({
            current: imageSrcList[0], // 当前显示图片的链接
            urls: imageSrcList, // 需要预览的图片链接列表
            success: () => {
                console.log('图片预览成功');
            },
            fail: (err) => {
                console.error('图片预览失败:', err);
                wx.showToast({
                    title: '图片预览失败',
                    icon: 'none',
                    duration: 2000
                });
            }
        });
    },

    // 处理富文本长按事件 - 触发二维码识别选择
    onRichTextLongPress: function (e) {
        console.log('Rich text long press event:', e.detail);

        // 如果有图片，显示二维码识别选项
        // if (this.data.imageSrcList.length > 0) {
        // this.showQRCodeScanOptions();
        // } else {
        // 如果没有图片但有链接，显示链接操作
        const linkMap = this.data.linkMap;
        const links = Object.keys(linkMap);

        if (links.length > 0) {
            this.showLinkActionPrompt(links);
        }
        // }
    },

    // 显示二维码识别选项
    showQRCodeScanOptions: function () {
        const imageSrcList = this.data.imageSrcList;

        if (imageSrcList.length === 1) {
            // 只有一张图片，直接询问是否识别
            wx.showModal({
                title: '二维码识别',
                content: '检测到图片，是否识别其中的二维码？',
                confirmText: '识别',
                cancelText: '取消',
                success: (res) => {
                    if (res.confirm) {
                        this.detectQRCodeInImage(imageSrcList[0]);
                    }
                }
            });
        } else {
            // 多张图片，显示选择列表
            this.showImageSelectionForQR();
        }
    },

    // 显示图片选择列表用于二维码识别
    showImageSelectionForQR: function () {
        const imageSrcList = this.data.imageSrcList;
        const itemList = imageSrcList.map((src, index) => {
            const fileName = this.getImageFileName(src);
            return `图片 ${index + 1}: ${fileName}`;
        });

        wx.showActionSheet({
            itemList: itemList,
            success: (res) => {
                if (!res.cancel) {
                    this.detectQRCodeInImage(imageSrcList[res.tapIndex]);
                }
            },
            fail: (err) => {
                console.log('ActionSheet failed:', err);
                wx.showToast({
                    title: '请重新尝试',
                    icon: 'none',
                    duration: 2000
                });
            }
        });
    },

    // 手动触发图片选择的方法（通过按钮触发）
    showImageOptions: function () {
        const imageSrcList = this.data.imageSrcList;

        if (imageSrcList.length === 0) {
            wx.showToast({
                title: '当前内容中没有图片',
                icon: 'none',
                duration: 1500
            });
            return;
        }

        this.showQRCodeScanOptions();
    },

    // 获取图片文件名
    getImageFileName: function (src) {
        if (!src) return '未知图片';

        // 从URL中提取文件名
        const parts = src.split('/');
        const fileName = parts[parts.length - 1];

        // 如果是占位符图片，提取text参数
        if (src.includes('placeholder.com') && src.includes('text=')) {
            const textMatch = src.match(/text=([^&]+)/);
            if (textMatch) {
                return decodeURIComponent(textMatch[1].replace(/\+/g, ' '));
            }
        }

        return fileName.length > 20 ? fileName.substring(0, 17) + '...' : fileName;
    },

    // 检测图片中的二维码
    detectQRCodeInImage: function (imageSrc) {
        // 显示加载提示
        wx.showLoading({
            title: '正在识别图片...',
            mask: true
        });

        // 判断图片是否为网络图片，如果是则先下载
        if (imageSrc.startsWith('http')) {
            wx.downloadFile({
                url: imageSrc,
                success: (res) => {
                    if (res.statusCode === 200) {
                        this.performQRCodeScan(res.tempFilePath, imageSrc);
                    } else {
                        wx.hideLoading();
                        wx.showToast({
                            title: '图片下载失败',
                            icon: 'none',
                            duration: 2000
                        });
                    }
                },
                fail: () => {
                    wx.hideLoading();
                    wx.showToast({
                        title: '图片下载失败',
                        icon: 'none',
                        duration: 2000
                    });
                }
            });
        } else {
            // 如果是本地路径
            this.performQRCodeScan(imageSrc, imageSrc);
        }
    },

    // 执行二维码扫描
    performQRCodeScan: function (filePath, originalSrc) {
        wx.scanCode({
            filePath: filePath,
            scanType: ['qrCode'],
            success: (res) => {
                wx.hideLoading();
                console.log('二维码识别结果:', res.result);

                if (res.result) {
                    // 判断是否是链接类型的二维码
                    if (res.result.startsWith('http://') || res.result.startsWith('https://')) {
                        wx.showModal({
                            title: '发现链接二维码',
                            content: `检测到链接类型的二维码，是否复制？\n\n${res.result.length > 50 ? res.result.substring(0, 50) + '...' : res.result}`,
                            confirmText: '复制链接',
                            cancelText: '取消',
                            success: (modalRes) => {
                                if (modalRes.confirm) {
                                    // 跳转到链接
                                    wx.navigateTo({
                                        url: '/pages/web-view/index?url=' + encodeURIComponent(res.result)
                                    });
                                }
                            }
                        });
                    } else {
                        // 非链接类型的二维码，复制到剪贴板
                        wx.showModal({
                            title: '发现二维码',
                            content: `检测到二维码内容，是否复制到剪贴板？\n\n${res.result.length > 50 ? res.result.substring(0, 50) + '...' : res.result}`,
                            confirmText: '复制',
                            cancelText: '取消',
                            success: (modalRes) => {
                                if (modalRes.confirm) {
                                    wx.setClipboardData({
                                        data: res.result,
                                        success: () => {
                                            wx.showToast({
                                                title: '已复制到剪贴板',
                                                icon: 'success',
                                                duration: 2000
                                            });
                                        }
                                    });
                                }
                            }
                        });
                    }
                } else {
                    wx.showToast({
                        title: '未识别到二维码内容',
                        icon: 'none',
                        duration: 2000
                    });
                }
            },
            fail: (err) => {
                wx.hideLoading();
                console.log('二维码识别失败:', err);

                // 识别失败，可能不是二维码，显示图片预览
                wx.showModal({
                    title: '提示',
                    content: '未检测到二维码，是否预览图片？',
                    confirmText: '预览',
                    cancelText: '取消',
                    success: (modalRes) => {
                        if (modalRes.confirm) {
                            wx.previewImage({
                                current: originalSrc,
                                urls: [originalSrc]
                            });
                        }
                    }
                });
            }
        });
    },

    // 手动触发链接复制的方法（可以绑定到按钮上）
    showLinkOptions: function () {
        const linkMap = this.data.linkMap;
        const links = Object.keys(linkMap);

        if (links.length > 0) {
            this.showLinkActionPrompt(links);
        } else {
            wx.showToast({
                title: '当前内容中没有链接',
                icon: 'none',
                duration: 1500
            });
        }
    },

    // 显示链接操作提示，让用户主动选择
    showLinkActionPrompt: function (links) {
        if (links.length === 1) {
            // 单个链接时，直接询问是否复制
            wx.showModal({
                title: '发现链接',
                content: `是否复制此链接？\n${links[0].substring(0, 50)}${links[0].length > 50 ? '...' : ''}`,
                confirmText: '复制',
                cancelText: '取消',
                success: (res) => {
                    if (res.confirm) {
                        this.copyToClipboard(links[0]);
                    }
                }
            });
        } else if (links.length > 1) {
            // 多个链接时，显示选择列表
            this.showLinkSelection(links);
        }
    },

    // 显示链接选择弹窗
    showLinkSelection: function (links) {
        const itemList = links.map((link, index) => {
            // 截取链接显示更友好的格式
            let displayText = link;
            if (link.length > 40) {
                displayText = link.substring(0, 37) + '...';
            }
            return `${index + 1}. ${displayText}`;
        });

        wx.showActionSheet({
            itemList: itemList,
            success: (res) => {
                if (!res.cancel) {
                    this.copyToClipboard(links[res.tapIndex]);
                }
            },
            fail: (err) => {
                console.log('ActionSheet failed:', err);
            }
        });
    },

    // 复制链接的函数
    copyToClipboard: function (text) {
        wx.setClipboardData({
            data: text,
            success: function () {
                console.log('文本已复制到剪贴板');
            },
            fail: function (err) {
                console.error('复制失败', err);
            }
        });
    },

    handleSubmitTask: function () {
        if (!wx.getStorageSync('token')) {
            this.setData({
                isModalVisible: true,
                modalTitle: '提示',
                modalContent: '请先登录'
            });
            return;
        }
        // 跳转到提交任务页面，并传递任务ID
        wx.navigateTo({
            url: '/pages/submit-task/submit-task?taskId=' + this.data.taskInfo.id
        });
    },

    previewImage: function (event) {
        const currentUrl = event.currentTarget.dataset.url;
        const urls = this.data.taskInfo.exampleImages.map(img => img.url);
        wx.previewImage({
            current: currentUrl, // 当前显示图片的http链接
            urls: urls // 需要预览的图片http链接列表
        });
    },

    onModalConfirm: function () {
        this.setData({
            isModalVisible: false
        });
    },
});